package webserver

import (
	"errors"
	"gitee.com/zhengjianfeng/pay-tool/common"
	"regexp"
)

var (
	G_orderPay *OrderPay
)

type OrderPay struct{}

// 验证订单参数
func (orderPay *OrderPay) CheckOrderParams(orderInfo common.OrderToPay) (err error) {
	var (
		isOk bool
	)

	// 商户名称 必填
	if orderInfo.MerId == "" {
		err = errors.New("商户名称为必填项")
		return
	}

	// 订单号必须是10到64位之间的字符串 数字+字母
	if isOk, _ = regexp.MatchString(`^[\w+]{10,64}$`, orderInfo.BusinessNumber); !isOk {
		err = errors.New("订单号格式不正确,格式要求^[\\w+]{10,64}$")
		return
	}
	// 	// 订单金额
	if isOk, _ = regexp.MatchString(`^[1-9]\d*$`, string(orderInfo.Amount)); !isOk {
		err = errors.New("金额格式不正确,必须是大于0的正整数，单位为分")
		return
	}

	// 支付类型 必填即可
	if orderInfo.Terminal == "" {
		err = errors.New("支付类型为必填项")
		return
	}

	// 订单时间 时间格式yyyy-MM-dd HH:mm:ss
	if isOk, _ = regexp.MatchString(`^(((20[0-3][0-9]-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|(20[0-3][0-9]-(0[2469]|11)-(0[1-9]|[12][0-9]|30))) (20|21|22|23|[0-1][0-9]):[0-5][0-9]:[0-5][0-9])$
`, orderInfo.Timestamp); !isOk {
		err = errors.New("订单时间格式不正确,格式要求yyyy-MM-dd HH:mm:ss")
		return
	}

	// 异步通知地址 必填即可
	if orderInfo.ServerUrl == "" {
		err = errors.New("异步通知地址为必填项")
		return
	}

	// 商品名称 必填即可
	if orderInfo.GoodsName == "" {
		err = errors.New("商品名称为必填项")
		return
	}

	// 签名必填
	if orderInfo.Sign == "" {
		err = errors.New("签名不正确")
		return
	}

	return
}

// 初始化
func InitOrderPay() (err error) {
	G_orderPay = &OrderPay{}

	return
}
